package offerbook;

/**
 * Created at 2019/11/1 0001 下午 7:34
 * 题目1：
 * I am a student. 反转,标点符号算作单词： student. a am I
 * 方式1：把字符串反转.tneduts a ma I
 *       然后把每个单词反转student. a am I
 * 方式2：用正则切割成字符串数组，然后倒序输出
 *
 * 题目2：TODO 正则复习,阿里巴巴面试题
 * 字符串倒叙输出，单词不倒序，过滤非法字符，单词间隔以一个空格表示
 *
 * 如：I am @!#$software1234engineer1234【输出】engineer software am I
 * 正则将非法字符用空格替换，再按空格split，最后倒序输出
 */
public class Code42_ReverseStringWords {

    public static String reverseString(String str){
        if(str == null || str.length() == 0){
            return str;
        }
        //trim()返回字符串的副本，忽略前导空白和尾部空白。
//        String[] split = str.split(" ");
//        String[] split = str.split("\\s");
        //Java在windows下 \\表示 \， \\s代表空格或者直接敲一个空格,+表示至少一次
        String[] split = str.split("\\s+");
        //用StringBuffer效率远高于string
        StringBuilder sb = new StringBuilder();
        for (int i = split.length-1; i >=0 ; i--) {
            sb.append(split[i]);
            if(i != 0){
                sb.append(" ");
            }
        }
        return sb.toString();
    }

    public static String reverseString2(String str){
        if(str == null || str.length() == 0){
            return str;
        }
        // \\s代表空格，或者直接敲一个空格
        str = str.replaceAll("[^a-zA-Z\\s]"," ");
        System.out.println("str = " + str);
        //通过所有空格分隔
        String[] split = str.split("\\s+");
        //用StringBuffer效率远高于string
        StringBuilder sb = new StringBuilder();
        for (int i = split.length-1; i >=0 ; i--) {
            sb.append(split[i]);
            if(i != 0){
                sb.append(" ");
            }
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        System.out.println(reverseString2("I am @!#$software1234engineer1234"));
    }
}
